#ifndef BANK_SYSTEM_HH
#define BANK_SYSTEM_HH

#include <vector>
#include <memory>
#include <string>
#include "Customer.hh"

namespace BankingSystem {

class BankSystem {
private:
    std::vector<std::unique_ptr<Customer>> customers; // List of customers
    std::vector<std::string> usedAccountIds;         // Track used account IDs

    // Helper methods
    std::string generateAccountId(const std::string& accountType) const;
    bool isUniqueAccountId(const std::string& accountId) const;
    Customer* findCustomer(const std::string& name) const;
    BankAccount* findAccount(const std::string& accountId) const;
    bool validateAccountId(const std::string& accountId) const;

public:
    BankSystem();
    ~BankSystem() = default;

    // Core functionality
    void registerCustomer(const std::string& name);
    void displayAllAccounts() const;
    bool generateGlobalReport() const;
    void run();
};

} // namespace BankingSystem

#endif // BANK_SYSTEM_HH